/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tela.iptsp.ass2013;

import ferramentas.CFG;
import ferramentas.DataUtil;
import ferramentas.DataUtil.DataFormat;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

/**
 *
 * @author ciar
 */
public class GeradorCSV_ASS2013 {

    private String textoCSV = "";

    public GeradorCSV_ASS2013() {
        addCabecalho();
    }

    private void addCabecalho() {
        textoCSV = textoCSV.concat(
                "Nome;Inscrição;CPF;Data Nascimento;RG;Órgão Exp.;Rua;Complemento;Bairro;Cidade;"
                + "Estado;Telefone;Celular;E-mail;Local do Encontro Pres.;Vínculo com SUS;Atividade prof. atual;"
                + "Graduação;Término (Graduação);Especialização;Término (Especialização);Mestrado;Término (Mestrado);"
                + "Doutorado;Término (Doutorado);Extensão;Término (Extensão)"
                + "1.1;1.2;1.3;Total Grupo I;2.1;2.2;2.3;2.4;2.5;Total Grupo II;3.1;3.2;3.3;Total Grupo III;"
                + "Cópia do RG e CPF;Diploma de graduação;Comprovante de vínculo SUS;Carta de Compromisso;"
                + "Termo de Compromisso;Horário Inscrição\r\n");
    }

    public File gerarListaCSV(ResultSet inscritos, String caminhoArquivo) throws SQLException, UnsupportedEncodingException {
        while (inscritos.next()) {
            addUsuario(inscritos);
        }
        return geraArquivoCSV(caminhoArquivo);
    }

    private File geraArquivoCSV(String caminhoArquivo) throws UnsupportedEncodingException {
        File arquivo = new File(caminhoArquivo + getNomeArquivoCSV());
        try {
            PrintWriter pw = new PrintWriter(arquivo, "UTF-8");
            pw.write(textoCSV);
            pw.close();
            return arquivo;

        } catch (FileNotFoundException ex) {
            System.out.println("" + new Date() + " - Erro ao gravar arquivo: " + arquivo.getAbsolutePath() + "\n\tCaminho: " + caminhoArquivo);
            return null;
        }
    }

    public String getNomeArquivoCSV() {
        return "lista_inscritos.csv";
    }

    private void addUsuario(ResultSet inscrito) throws SQLException {
        double total_1 = (((double) inscrito.getInt("m1_1")) * 2.0
                + ((double) inscrito.getInt("m1_2")) * 1.0
                + ((double) inscrito.getInt("m1_3")) * 1.0);
        if (total_1 > 3) {
            total_1 = 3;
        }
        double total_2 = (((double) inscrito.getInt("m2_1")) * 2.0
                + ((double) inscrito.getInt("m2_2")) * 1.0
                + ((double) inscrito.getInt("m2_3")) * 1.0
                + ((double) inscrito.getInt("m2_4")) * 1.0
                + ((double) inscrito.getInt("m2_5")) * 1.0);
        if (total_2 > 5) {
            total_2 = 5;
        }
        double total_3 = (((double) inscrito.getInt("m3_1")) * 0.5
                + ((double) inscrito.getInt("m3_2")) * 1.0
                + ((double) inscrito.getInt("m3_3")) * 0.5);
        if (total_3 > 2) {
            total_3 = 2;
        }
        textoCSV = textoCSV.concat(""
                + inscrito.getString("nome").replaceAll(";", "") + "; "
                + inscrito.getInt("inscricao") + "; "
                + inscrito.getString("cpf").replaceAll(";", "") + "; "
                + DataUtil.converterData(inscrito.getDate("nascimento"), DataFormat.DDMMAAAA).replaceAll(";", "") + "; "
                + inscrito.getString("rg").replaceAll(";", "") + "; "
                + inscrito.getString("orgao_rg").replaceAll(";", "") + "; "
                + inscrito.getString("rua").replaceAll(";", "") + "; "
                + inscrito.getString("complemento").replaceAll(";", "") + "; "
                + inscrito.getString("bairro").replaceAll(";", "") + "; "
                + inscrito.getString("cidade").replaceAll(";", "") + "; "
                + inscrito.getString("estado").replaceAll(";", "") + "; "
                + inscrito.getString("telefone").replaceAll(";", "") + "; "
                + inscrito.getString("celular").replaceAll(";", "") + "; "
                + inscrito.getString("email").replaceAll(";", "") + "; "
                + inscrito.getString("local_encontro").replaceAll(";", "") + "; "
                + inscrito.getString("vinculo_sus").replaceAll(";", "") + "; "
                + inscrito.getString("atividade_profissional").replaceAll(";", "") + "; "
                + inscrito.getString("graduacao").replaceAll(";", "") + "; "
                + DataUtil.converterData(new Date(inscrito.getDate("graduacao_termino").getTime()), DataFormat.MMAAAA)+"; "
                + (inscrito.getString("especializacao") != null ? inscrito.getString("especializacao") : "---").replaceAll(";", "") + "; "
                + (inscrito.getString("especializacao_termino") != null ? DataUtil.converterData(new Date(inscrito.getDate("especializacao_termino").getTime()), DataFormat.MMAAAA) : "---") + "; "
                + (inscrito.getString("mestrado") != null ? inscrito.getString("mestrado") : "---").replaceAll(";", "") + "; "
                + (inscrito.getString("mestrado_termino") != null ? DataUtil.converterData(new Date(inscrito.getDate("mestrado_termino").getTime()), DataFormat.MMAAAA) : "---") + "; "
                + (inscrito.getString("doutorado") != null ? inscrito.getString("doutorado") : "---").replaceAll(";", "") + "; "
                + (inscrito.getString("doutorado_termino") != null ? DataUtil.converterData(new Date(inscrito.getDate("doutorado_termino").getTime()), DataFormat.MMAAAA) : "---") + "; "
                + (inscrito.getString("extensao") != null ? inscrito.getString("extensao") : "---").replaceAll(";", "") + "; "
                + (inscrito.getString("extensao_termino") != null ? DataUtil.converterData(new Date(inscrito.getDate("extensao_termino").getTime()), DataFormat.MMAAAA) : "---") + "; "
                + String.valueOf(inscrito.getInt("m1_1")) + "; "
                + String.valueOf(inscrito.getInt("m1_2")) + "; "
                + String.valueOf(inscrito.getInt("m1_3")) + "; "
                + String.valueOf(total_1) + "; "
                + String.valueOf(inscrito.getInt("m2_1")) + "; "
                + String.valueOf(inscrito.getInt("m2_2")) + "; "
                + String.valueOf(inscrito.getInt("m2_3")) + "; "
                + String.valueOf(inscrito.getInt("m2_4")) + "; "
                + String.valueOf(inscrito.getInt("m2_5")) + "; "
                + String.valueOf(total_2) + "; "
                + String.valueOf(inscrito.getInt("m3_1")) + "; "
                + String.valueOf(inscrito.getInt("m3_2")) + "; "
                + String.valueOf(inscrito.getInt("m3_3")) + "; "
                + String.valueOf(total_3) + "; "
                + getLinkCopiaRGCPF(inscrito.getString("copia_rg_cpf")).replaceAll(";", "") + "; "
                + getLinkDiploma(inscrito.getString("diploma")).replaceAll(";", "") + "; "
                + getLinkComprovanteSUS(inscrito.getString("comprovante_sus")).replaceAll(";", "") + "; "
                + getLinkCartaLiberacao(inscrito.getString("carta_liberacao")).replaceAll(";", "") + "; "
                + getLinkTermoCompromisso(inscrito.getString("termo_compromisso")).replaceAll(";", "") + "; "
                + DataUtil.converterData(new Date(inscrito.getTimestamp("horario").getTime()), DataFormat.DDMMAAAAHHMMSS)
                + "\r\n");
    }
    private String caminhoDocumentos = "http://mercurio.ciar.ufg.br:8080/bridge_files/documentos/" + CFG.DIRETORIO_DOCUMENTOS_ASS_2013 + "/";

    private String getLinkCopiaRGCPF(String nomeArquivo) {
        return getLink(caminhoDocumentos + CFG.ASS_RG_CPF, nomeArquivo);
    }

    private String getLinkDiploma(String nomeArquivo) {
        return getLink(caminhoDocumentos + CFG.ASS_DIPLOMA, nomeArquivo);
    }

    private String getLinkComprovanteSUS(String nomeArquivo) {
        return getLink(caminhoDocumentos + CFG.ASS_COMPROVANTE_SUS, nomeArquivo);
    }

    private String getLinkCartaLiberacao(String nomeArquivo) {
        return getLink(caminhoDocumentos + CFG.ASS_CARTA_LIBERACAO, nomeArquivo);
    }

    private String getLinkTermoCompromisso(String nomeArquivo) {
        return getLink(caminhoDocumentos + CFG.ASS_TERMO_COMPROMISSO, nomeArquivo);
    }

    private String getLink(String diretorio, String nomeArquivo) {
        if (nomeArquivo != null) {
            return diretorio + "/" + nomeArquivo;
        } else {
            return "Não enviado";
        }
    }
}
